home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / snz128s / src / defs.h < prev    next >
C/C++ Source or Header  |  1994-05-23  |  12KB  |  289 lines

  1. /*
  2.     SNEWS 2.0
  3.     
  4.     DEFS.H
  5.  
  6.     General public decls
  7.  
  8.  
  9.     Copyright (C) 1991    John McCombs, Christchurch, NEW ZEALAND
  10.                           john@ahuriri.gen.nz
  11.                           PO Box 2708, Christchurch, NEW ZEALAND
  12.  
  13.     This program is free software; you can redistribute it and/or modify
  14.     it under the terms of the GNU General Public License, version 1, as
  15.     published by the Free Software Foundation.
  16.  
  17.     This program is distributed in the hope that it will be useful,
  18.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.     GNU General Public License for more details.
  21.  
  22.     See the file COPYING, which contains a copy of the GNU General
  23.     Public License.
  24.  */
  25.  
  26. /*---------------------------- Source Control ------------------------------*/
  27.  
  28. /*
  29.  * $Id: DEFS.H,v 1.2 1994/02/05 18:44:34 gbj Exp user $
  30.  */
  31.  
  32. /****************************************************************************
  33. *   20 May 92   1.2     GT  ka9q mods.                                      *
  34. *   22 May 92   1.3     GT  Fix "reply" and "mail" commands.                *
  35. *   03 Jun 92   1.4     GT  Less vigorous message quoting.                  *
  36. *   05 Jun 92   1.7     GT  SPACE command and From: address parsing.        *
  37. *   06 Jun 92   1.8     GT  Fix 1.7.                                        *
  38. *   07 Jun 92   1.9     GT  Fix mail queue directory parameter.             *
  39. *   08 Jun 92   1.10    GT  FQDN in "Path:".                                *
  40. *   09 Jun 92   1.11    GT  Only expand "Path:" in header.                  *
  41. *   12 Jun 92   1.12    NJL 50-line mode & lots of other stuff.             *
  42. *   16 Jun 92   1.13    GT  Post via "mail2news".                           *
  43. *   24 Jun 92   1.14    GT  Fix unbatch.                                    *
  44. *   26 Jun 92   1.15    GT  Multiple bug fixes.                             *
  45. *   17 Jul 92   1.16    GT  C++ compilation.                                *
  46. *   16 Aug 92   1.17    MSM Revised to snews 1.90 level                     *
  47. *   13 Feb 93   1.18    MSM Local posting added                             *
  48. *   20 Feb 93   1.19    MSM Local posting read option                       *
  49. *   31 May 93   1.20    MSM Revised to snews 2.00 level                     *
  50. *    2 Jul 93   1.21    MSM Editor and Maillog items added to UUCP          *
  51. *    1 Oct 93   1.22    MSM TAB and Header items added to UUCP              *
  52. *    2 Apr 94   1.23    MSM Suspend support added                *
  53. *                Footer support added                *
  54. ****************************************************************************/
  55.  
  56. /*------------------------------- includes --------------------------------*/
  57.  
  58. #undef DEBUG
  59.  
  60. #ifdef __TURBOC__
  61. #    include <alloc.h>
  62. #else
  63. #    ifndef ATARI
  64. #        include <malloc.h>
  65. #    endif
  66. #endif
  67. #include <time.h>
  68. #include <string.h>
  69. #include <conio.h>
  70. #include <dos.h>
  71. #include <stdio.h>
  72. #include <stdlib.h>
  73. #include <string.h>
  74. #ifdef ATARI
  75. #    include <sys/types.h>
  76. #    include <ext.h>
  77. #endif
  78. #include <sys/stat.h>
  79. #include "version.h"
  80. #ifdef __TURBOC__
  81. #include <dir.h>
  82. #else
  83. #    ifndef ATARI
  84. #        include <direct.h>
  85. #    else
  86. #        include <sys/dir.h>
  87. #    endif
  88. #endif
  89.  
  90. /*------------------------------- defines ----------------------------------*/
  91.  
  92. #define VERSION szVerName
  93.  
  94. #define HIST_MEM_LIMIT    75000l    /* leave this much meme free loading history */
  95.  
  96. #define ACTIVE_NUM_LEN   8          /* length of the numbers in the active file */
  97.  
  98. #ifndef TRUE
  99. #define TRUE     1
  100. #define FALSE    0
  101. #endif
  102.  
  103. #ifdef ATARI
  104. #    define farcoreleft()    coreleft
  105. #endif
  106.  
  107.  
  108. #ifdef DEBUG
  109. #define    DBGOUT(x)   printf x
  110. #else
  111. #define    DBGOUT(x)
  112. #endif
  113.  
  114. #define malloc(x) xmalloc(x)
  115.  
  116. /*--------------------------------- types -------------------------------------------*/
  117.  
  118. /*
  119.  * This is the data we get from the UUPC .rc files
  120.  */
  121.  
  122. typedef struct {
  123.     char temp_name[80];               /* unbatch temp file             */
  124.     char news_dir[80];                /* news base directory           */
  125.     char incoming_dir[80];            /* incoming news spool directory */
  126.     char user[80];                    /* current user id               */
  127.     char my_name[80];                 /* my full name                  */
  128.     char my_domain[80];               /* our domain                    */
  129.     char my_site[80];                 /* site name                     */
  130.     char my_organisation[80];         /* organisation                  */
  131.     char replyuser[80];               /* Reply-To User Address         */
  132.     char mailuser[80];                /* Pseudo mail user for post log */
  133.     char maillog[80];                 /* Pseudo mail user for mail     */
  134.     char extruser[80];                /* Pseudo mail user for extracts */
  135.     char mail_server[80];             /* where posts are routed to     */
  136.     char mail_id[80];                 /* ID to mail news articles to   */
  137.     char editor[80];                  /* system editor                 */
  138.     char edit_line[80];               /* Editor command line parameter */
  139.     char home[80];                    /* home mail directory           */
  140.     char signature[80];               /* signature file                */
  141.     char spooldir[80];                /* outbound mail directory       */
  142.     char quotemark[80];               /* prefix for quoting articles   */
  143.     char directvideo;                 /* direct video flag             */
  144.     char mail_dir[80];                /* Location of Mail Directory    */
  145.     char nntp_dir[80];                /* Location of ka9q nntp Dir.    */
  146.     char localpost;                   /* Post news locally             */
  147.     char localread;                   /* Don't read local posts        */
  148.     char exitconfirm;                 /* Confirm exit to DOS           */
  149.     char expert;                      /* Expert mode                   */
  150.     char alias_file[80];              /* Location of the mail aliases  */
  151.     char tab_action;                  /* Old or new tab functionality  */
  152.     char header_quote;                /* Quote Headers in followups    */
  153.     char footer_quote;              /* Quote footers in followups    */
  154.     char show_unread;                 /* Group / Thread dispay style   */
  155.     int  match_len;                   /* Length of minimum match       */
  156. } INFO;
  157.  
  158. /*
  159.  * This structure is a linked list of lines that make up an article. The
  160.  * file is read in and the linked list is built.
  161.  *
  162.  * This structure will replace the snews 1.90 LINE structure when
  163.  * conversion is completed.
  164.  *
  165.  */
  166.  
  167. typedef struct lines {
  168.     char         *data;               /* line of text           */
  169.     struct lines *next;               /* next line              */
  170.     struct lines *last;               /* last line              */
  171.     int           index;              /* line number from start */
  172. } LINES;
  173.  
  174. /*
  175.  * NOTE - if hi_num and lo_num are the same there are no articles
  176.  */
  177.  
  178. typedef struct active {
  179.     char           group[60];         /* group name                              */
  180.     char           gp_file[9];        /* name of the file that the data is in    */
  181.     long           lo_num;            /* lowest number less one                  */
  182.     long           hi_num;            /* highest number                          */
  183.     long           num_pos;           /* file offset of the numbers              */
  184.     struct active *next;              /* next entry                              */
  185.     struct active *last;              /* last entry                              */
  186.     int            index;             /* which number in the list, from 0        */
  187.     char          *read_list;         /* array hi_num-lo_num long. TRUE=read it  */
  188.     int            groups;            /* filled in by load_active_file() in head */
  189.     int            threads;           /* filled in by get_headers()              */
  190.     int           suspend;          /* True if suspended             */
  191. } ACTIVE;
  192.  
  193. /*
  194.  *    This singly linked list is used to store the names of the groups
  195.  *    we can post to.
  196.  */
  197.  
  198. typedef struct post_groups {
  199.     char                group[60];    /* group name */
  200.     int                 local;        /* local news group 2.0 feature */
  201.     struct post_groups *next;         /* next entry */
  202. } POST_GROUPS;
  203.  
  204. /*
  205.  *    This singly linked list is used to store the name of the groups
  206.  *    that are currently suspended.
  207.  */
  208.  
  209. typedef struct suspend {
  210.     char         group[60];    /* group name */
  211.     struct suspend    *next;        /* next entry */
  212. } SUSPEND;
  213.  
  214. /*
  215.  *    READ LIST:
  216.  *        The list of articles which has been seen by a user is kept in an
  217.  *        ascii file, which has a newsgroup name followed by the list
  218.  *        of article numbers which have been seen.
  219.  *
  220.  *        The file is read by 'load_read_list', which allocates and array of
  221.  *        flags, one per article, and plugs these into the ACTIVE structure.
  222.  *        The flags are set to TRUE when a user has seen an article.
  223.  *
  224.  *        On shutdown a new 'user.nrc' file is written
  225.  */
  226.  
  227. /*
  228.  *    This structure is an index to the history file.  'mid' is a 32bit hash
  229.  *    of the message id.    'offset' is the offset into the history file, and
  230.  *    'next' makes the linked list. 'ngroups' is a cross-post count.
  231.  */
  232.  
  233. typedef struct hist_list {
  234.     long mid;       /* hashed Message-ID: */
  235.     int ngroups;    /* Number of groups in Newsgroups: */
  236.     long offset;    /* ftell() of where in history list this entry is */
  237.     struct hist_list *next;
  238. } HIST_LIST;
  239.  
  240. /*
  241.  *    This linked list is returned by 'look_up_history'.    It is a list
  242.  *    of the groups to which an article has been crossposted.  It does
  243.  *    not include self
  244.  */
  245.  
  246. typedef struct cross_posts {
  247.     char                group[60];    /* group name                   */
  248.     long                art_num;      /* article number in this group */
  249.     struct cross_posts *next;         /* next entry                   */
  250. } CROSS_POSTS;
  251.  
  252. /*-------------------------------- externs ---------------------------------*/
  253.  
  254. extern INFO my_stuff;
  255.  
  256. #ifndef ACTIVE_C
  257. extern int textb, textf, headb, headf, helpf, helpb, msgf, msgb;
  258. #endif
  259.  
  260. /*------------------------------ prototypes --------------------------------*/
  261.  
  262. ACTIVE          *load_active_file(void);
  263. void             close_active_file(void);
  264. void             close_active(void);
  265. ACTIVE          *find_news_group(char *group, int *junk_flag);
  266. void             update_active_entry(ACTIVE *a);
  267. char            *make_news_group_name(char *ng);
  268. void             save_read_list(void);
  269. void             load_read_list(void);
  270. int              load_stuff(void);
  271. FILE            *open_out_file(char *ng, int *junk_flag);
  272. FILE            *open_index_file(char *ng);
  273. int              post_sequence(void);
  274. void            *xmalloc(size_t size);
  275. int              check_valid_post_group(char *ng);
  276. void             free_ng(void);
  277. FILE            *open_hist_file(void);
  278. void             close_hist_file(void);
  279. void             add_hist_record(char *msg_id, char *ng);
  280. HIST_LIST       *load_history_list(int);
  281. void             free_hist_list(void);
  282. HIST_LIST       *find_msg_id(char *msg_id);
  283. CROSS_POSTS     *look_up_history(char *msg_id, char *ng);
  284. void             free_cross_post_list(CROSS_POSTS *cx);
  285. void         abort_error(int, char*);
  286. SUSPEND        *load_suspend(void);
  287. void         free_suspend(SUSPEND*);
  288. void         add_suspend(ACTIVE*);
  289.